package br.com.meuvoto.candidato.entity;

import java.io.Serializable;
import java.util.Calendar;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import br.com.meuvoto.partido.entity.Partido;
import br.com.meuvoto.voto.entity.Voto;

@Entity
public class Candidato implements Serializable {

	private static final long serialVersionUID = 5265715433221910186L;

	@Id
	@GeneratedValue
	@Column(unique = true, nullable = false)
	private long id;
	
	@Column(nullable = false, length = 70)
	private String nome;
	
	@Column(unique = true, nullable = false, length = 11)
	private String nuCpf;
	
	@Column(nullable = false, length = 10)
	private String sexo;
	
	@Column(nullable = false, length = 10)
	private Calendar dtNasc;
	
	@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, targetEntity = Partido.class)
	private Partido partido;
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "candidato", targetEntity = Voto.class)
	private List<Voto> votosRecebidos;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNuCpf() {
		return nuCpf;
	}

	public void setNuCpf(String nuCpf) {
		this.nuCpf = nuCpf;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public Calendar getDtNasc() {
		return dtNasc;
	}

	public void setDtNasc(Calendar dtNasc) {
		this.dtNasc = dtNasc;
	}

	public Partido getPartido() {
		return partido;
	}

	public void setPartido(Partido partido) {
		this.partido = partido;
	}

	public List<Voto> getVotosRecebidos() {
		return votosRecebidos;
	}

	public void setVotosRecebidos(List<Voto> votosRecebidos) {
		this.votosRecebidos = votosRecebidos;
	}
	
}
